import { message,Spin } from "antd";
import axios from "axios";


// 创建实例
const instance = axios.create({
  baseURL:'http://blogapi.shbwyz.com',  // 设置基础接口地址
  // baseURL:'/api',  // 设置基础接口地址
  timeout:5000, // 超时时间
  headers:{} // 请求头参数
})

// 设置请求次数
let loadingCount = 0;

// 自定义 loading 开启和关闭逻辑
// 这里定义了加载的loading的结构样式
const showLoading = () => {
  Spin.setDefaultIndicator(
    <div className="custom-spin" style={{
      position: 'fixed',
      top: 0,
      left: 0,
      right: 0,
      bottom: 0,
      backgroundColor: 'rgba(255, 255, 255, 0.7)',
      zIndex: 9999
    }}>
      <Spin size="large" />
    </div>
  );
};


// 开启loading
const startLoading = ()=>{
  if(loadingCount === 0){
    showLoading()
  }
  loadingCount++
}


// 关闭loading
const endLoading = ()=>{
  loadingCount--
  if(loadingCount === 0){
    Spin.setDefaultIndicator(null)
  }
}


// 请求拦截器
instance.interceptors.request.use((config)=>{
  // 在发送请求的时候携带token数据  注意这里的header头中的键名要和接口文档中一致,不要和localStorage中的token键名搞混了,而且根据接口文档中要求,需要添加 'Bearer ' 
  const token = localStorage.getItem('token')
  if(token){
    config.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token')
  }
  startLoading()  // 开启loading
  return config
},(error)=>{
  endLoading()  // 关闭loading
  return Promise.reject(error)
})

// 响应拦截器
instance.interceptors.response.use((response)=>{
  endLoading()  // 关闭loading
  return response
},(error)=>{
  endLoading()  //  关闭loading
  // 获取当前的错误状态码
  const status = error.response.status
  // 401 未授权 token过期  跳转到登录页
  switch (status) {
    case 401:
      // 清除token
      localStorage.removeItem('token')
      // 跳转到登录页
      window.location.href = '/login'
      break;
    case 403:
        message.error('没有权限')
        break;
    case 404:
        message.error('资源未找到')
        break;
    case 500:
          message.error('服务器错误')
          break;
    default:
      break;
  }


  return Promise.reject(error)
})


export default instance
